package cineplanet.modelo;

import java.io.Serializable;
import javax.persistence.*;

import java.util.Collection;

/**
 * The persistent class for the producto database table.
 * 
 */
@Entity
@Table(name = "producto")
@NamedQueries({
		@NamedQuery(name = "Producto.findAll", query = "SELECT pr FROM Producto pr"),
		@NamedQuery(name = "Producto.findByIdProducto", query = "SELECT pr FROM Producto pr WHERE pr.idProducto = :idProducto"),
		@NamedQuery(name = "Producto.findByDescripcion", query = "SELECT pr FROM Producto pr WHERE pr.descripcion = :descripcion"),
		@NamedQuery(name = "Producto.findByEstado", query = "SELECT pr FROM Producto pr WHERE pr.estado = :estado"),
		@NamedQuery(name = "Producto.findByNombre", query = "SELECT pr FROM Producto pr WHERE pr.nombre = :nombre"),
		@NamedQuery(name = "Producto.findByPortada", query = "SELECT pr FROM Producto pr WHERE pr.portada = :portada"),
		@NamedQuery(name = "Producto.findByPrecio", query = "SELECT pr FROM Producto pr WHERE pr.precio = :precio")
})
public class Producto implements Serializable {
	private static final long serialVersionUID = 1L;

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Basic(optional = false)
	@Column(name = "idProducto")
	private Integer idProducto;

	@Lob()
	@Column(name = "descripcion")
	private String descripcion;
	@Column(name = "estado")
	private byte estado;
	@Column(name = "nombre")
	private String nombre;
	@Column(name = "portada")
	private byte portada;
	@Column(name = "precio")
	private Double precio;

	// bi-directional many-to-one association to Productotipo
    @JoinColumn(name = "idProductoTipo", referencedColumnName = "idProductoTipo")
    @ManyToOne(optional = false)
	private ProductoTipo idProductoTipo;

	// bi-directional many-to-one association to VentaDetalle
//	@OneToMany(mappedBy = "producto")
//	private Set<VentaDetalle> ventaDetalles;
	@OneToMany(cascade = CascadeType.ALL, mappedBy = "idProducto")
	private Collection<VentaDetalle> ventaDetalleCollection;

	public Producto() {
	}

	public Integer getIdProducto() {
		return idProducto;
	}

	public void setIdProducto(Integer idProducto) {
		this.idProducto = idProducto;
	}

	public String getDescripcion() {
		return this.descripcion;
	}

	public void setDescripcion(String descripcion) {
		this.descripcion = descripcion;
	}

	public byte getEstado() {
		return this.estado;
	}

	public void setEstado(byte estado) {
		this.estado = estado;
	}

	public String getNombre() {
		return this.nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	public byte getPortada() {
		return this.portada;
	}

	public void setPortada(byte portada) {
		this.portada = portada;
	}

	public Double getPrecio() {
		return this.precio;
	}

	public void setPrecio(Double precio) {
		this.precio = precio;
	}

	public void setVentaDetalleCollection(Collection<VentaDetalle> ventaDetalleCollection) {
		this.ventaDetalleCollection = ventaDetalleCollection;
	}

	public Collection<VentaDetalle> getVentaDetalleCollection() {
		return ventaDetalleCollection;
	}

	@Override
    public int hashCode() {
        int hash = 0;
        hash += (idProducto != null ? idProducto.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Producto)) {
            return false;
        }
        Producto other = (Producto) object;
        if ((this.idProducto == null && other.idProducto != null) || (this.idProducto != null && !this.idProducto.equals(other.idProducto))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "cineplanet.modelo.Producto[idProducto=" + idProducto + "]";
    }

	public void setIdProductoTipo(ProductoTipo idProductoTipo) {
		this.idProductoTipo = idProductoTipo;
	}

	public ProductoTipo getIdProductoTipo() {
		return idProductoTipo;
	}

}